<?php

if (!defined('ADODB_DIR'))
    die();

class ADODB2_sapdb extends ADODB_DataDict {

    var $databaseType = 'sapdb';
    var $seqField = false;
    var $renameColumn = 'RENAME COLUMN %s.%s TO %s';

    function ActualType($meta) {
        switch ($meta) {
            case 'C': return 'VARCHAR';
            case 'XL':
            case 'X': return 'LONG';

            case 'C2': return 'VARCHAR UNICODE';
            case 'X2': return 'LONG UNICODE';

            case 'B': return 'LONG';

            case 'D': return 'DATE';
            case 'TS':
            case 'T': return 'TIMESTAMP';

            case 'L': return 'BOOLEAN';
            case 'I': return 'INTEGER';
            case 'I1': return 'FIXED(3)';
            case 'I2': return 'SMALLINT';
            case 'I4': return 'INTEGER';
            case 'I8': return 'FIXED(20)';

            case 'F': return 'FLOAT(38)';
            case 'N': return 'FIXED';
            default:
                return $meta;
        }
    }

    function MetaType($t, $len = -1, $fieldobj = false) {
        if (is_object($t)) {
            $fieldobj = $t;
            $t = $fieldobj->type;
            $len = $fieldobj->max_length;
        }
        static $maxdb_type2adodb = array(
            'VARCHAR' => 'C',
            'CHARACTER' => 'C',
            'LONG' => 'X',
            'DATE' => 'D',
            'TIMESTAMP' => 'T',
            'BOOLEAN' => 'L',
            'INTEGER' => 'I4',
            'SMALLINT' => 'I2',
            'FLOAT' => 'F',
            'FIXED' => 'N',
        );
        $type = isset($maxdb_type2adodb[$t]) ? $maxdb_type2adodb[$t] : 'C';
        if ($t == 'FIXED' && !$fieldobj->scale && ($len == 20 || $len == 3)) {
            $type = $len == 20 ? 'I8' : 'I1';
        }
        if ($fieldobj->auto_increment)
            $type = 'R';

        return $type;
    }

    function _CreateSuffix($fname, &$ftype, $fnotnull, $fdefault, $fautoinc, $fconstraint, $funsigned) {
        $suffix = '';
        if ($funsigned)
            $suffix .= ' UNSIGNED';
        if ($fnotnull)
            $suffix .= ' NOT NULL';
        if ($fautoinc)
            $suffix .= ' DEFAULT SERIAL';
        elseif (strlen($fdefault))
            $suffix .= " DEFAULT $fdefault";
        if ($fconstraint)
            $suffix .= ' ' . $fconstraint;
        return $suffix;
    }

    function AddColumnSQL($tabname, $flds) {
        $tabname = $this->TableName($tabname);
        $sql = array();
        list($lines, $pkey) = $this->_GenFields($flds);
        return array('ALTER TABLE ' . $tabname . ' ADD (' . implode(', ', $lines) . ')');
    }

    function AlterColumnSQL($tabname, $flds) {
        $tabname = $this->TableName($tabname);
        $sql = array();
        list($lines, $pkey) = $this->_GenFields($flds);
        return array('ALTER TABLE ' . $tabname . ' MODIFY (' . implode(', ', $lines) . ')');
    }

    function DropColumnSQL($tabname, $flds) {
        $tabname = $this->TableName($tabname);
        if (!is_array($flds))
            $flds = explode(',', $flds);
        foreach ($flds as $k => $v) {
            $flds[$k] = $this->NameQuote($v);
        }
        return array('ALTER TABLE ' . $tabname . ' DROP (' . implode(', ', $flds) . ')');
    }

}

?>